package com.atguigu.java;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @author yihu
 * @create 2021-03-08 11:32
 * @email: 1057202547@qq.com
 * @dec: 泛型类
 */
public class Order<T> {
    String orderName;

    @Override
    public String toString() {
        return "Order{" +
                "orderName='" + orderName + '\'' +
                ", orderid=" + orderid +
                ", orderT=" + orderT +
                '}';
    }

    public void setOrderName(String orderName) {
        this.orderName = orderName;
    }

    public void setOrderid(int orderid) {
        this.orderid = orderid;
    }

    public void setOrderT(T orderT) {
        this.orderT = orderT;
    }

    public String getOrderName() {
        return orderName;
    }

    public int getOrderid() {
        return orderid;
    }

    public T getOrderT() {
        return orderT;
    }

    int orderid;

    //类的内部就可以使用类的泛型
    T orderT;

    public Order(String orderName, int orderid, T orderT) {
        this.orderName = orderName;
        this.orderid = orderid;
        this.orderT = orderT;
    }

    public  Order(){
        //编译不通过
//        T[] arr = new T[10];
        //编译通过
        T[] arr =(T[]) new Object[10];
    }

    //静态方法中不能使用类的泛型。
//    public static void show(T orderT){
//        System.out.println(orderT);
            //编译不通过
            //        try{
            //
            //
            //        }catch(T t){
            //
            //        }
//    }

    //泛型方法：在方法中出现了泛型的结构，泛型参数与类的泛型没有任何关系
    //换句话说，泛型方法所属的类是不是泛型类都没有关系
    //泛型方法可以声明为静态的，原因：泛型参数是调用方法时确定的，并非在实例化的时候确定的
    public <E> List<E> copyFromArrayToList(E[] arr){
        ArrayList<E> list = new ArrayList<E>();
        for (E e:arr){
            list.add(e);
        }
        return  list;
    }

}
